package org.fast.cms.domain.admin.request.user;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import org.fast.cms.common.domain.request.AbstractParameterBean;
import org.fast.cms.common.domain.request.group.Insert;
import org.fast.cms.common.domain.request.group.Update;
import org.fast.cms.common.enums.DictEnum;
import org.fast.cms.common.validation.anno.DateFormat;
import org.fast.cms.validation.anno.DictExists;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;

import lombok.Getter;
import lombok.Setter;

/**
 * 用户登录/修改Bean
 */
@Getter
@Setter
@SuppressWarnings("serial")
public class UserBean extends AbstractParameterBean {

	/** 用户ID */
	@NotNull(groups={Update.class}, message="用户ID为空")
	private Integer userId;

	/** 工号 */
//	@NotBlank(groups={Insert.class}, message="工号不能为空")
	@Length(groups={Insert.class}, max=10, message="工号长度不能大于10")
	@Pattern(groups={Insert.class}, regexp="\\w{1,10}", message="工号只能输入字母和数字且只能是10位")
	private String empNo;

	/** 用户名 */
	@NotBlank(groups={Insert.class}, message="用户名不能为空")
	@Length(groups={Insert.class}, max=20, message="用户名长度不能大于20")
	@Pattern(groups={Insert.class}, regexp="[\\w\\.]{1,20}", message="用户名只能输入字母/./数字")
	private String loginName;

	/** 姓名 */
	@NotBlank(groups={Update.class, Insert.class}, message="姓名不能为空")
	@Length(groups={Update.class, Insert.class}, max=10, message="姓名长度不能大于10")
	@Pattern(groups={Update.class, Insert.class}, regexp="[a-zA-Z0-9_\u4e00-\u9fa5]{1,10}", message="姓名只能输入汉字/字母/数字")
	private String userName;

	/** 识别码 */
	private String identityCode;
	
	/**
	 * 职位
	 */
	@NotNull(groups={Insert.class, Update.class}, message="职位不能为空")
	private Integer roleCode;

	/** 密码类型 */
	@NotNull(groups={Insert.class}, message="必须选择密码类型")
	private Integer passwordType;

	/** 密码 */
	@Pattern(groups={Update.class, Insert.class}, regexp="^[0-9A-Za-z]{8,12}$", message="密码只能是8-12位数字和字母组成！")
	private String password;

	/** 邮件 */
	@NotNull(groups={Update.class, Insert.class}, message="邮箱不能为空")
	@Length(groups={Update.class, Insert.class}, max=64, message="邮箱长度不能大于64")
	@Email(groups={Update.class, Insert.class}, message="邮箱格式不正确")
	private String email;

	/** 手机号码 */
	@NotNull(groups={Insert.class, Update.class}, message="手机号不能为空")
	@Length(groups={Update.class, Insert.class}, message="手机长度过长", max=32)
	@Pattern(groups={Update.class, Insert.class}, regexp="1[3|4|5|7|8][0-9]{9}", message="手机号码不正确")
	private String mobile;

	/** 座机号码 */
	@Length(groups={Update.class, Insert.class}, message="座机号码过长", max=20)
	@Pattern(groups={Update.class, Insert.class}, regexp="(^(\\d{3,4}-)?\\d{7,8})$|(1[3|4|5|7|8][0-9]{9})", message="电话号码格式不正确")
	private String tel;

	/** 身份证 */
	@Length(groups={Update.class, Insert.class}, message="身份证号码长度不对", max=18)
	@Pattern(groups={Update.class, Insert.class}, regexp="[0-9]{17}[1-9|X|x]{1}", message="身份证格式不正确")
	private String idcard;

	/** 生日 */
	@DateFormat(groups={Update.class, Insert.class}, format="yyyy-MM-dd", message="出生日期格式不正确")
	private String birthday;

	/** 籍贯（省） */
	private Integer province;

	/** 籍贯（市） */
	private Integer city;

	/** 性别 */
	@DictExists(groups={Update.class, Insert.class}, dictType=DictEnum.SEX, message="性别类型不存在")
	private Integer sex;

	/** 学历 */
	@DictExists(groups={Update.class, Insert.class}, dictType=DictEnum.EDUCATION, message="学历类型不存在")
	private Integer degree;

	/** 户籍 */
	@Length(groups={Update.class, Insert.class}, max=64, message="户籍内容超过长度")
	@Pattern(groups={Update.class, Insert.class}, regexp="[a-zA-Z0-9_\u4e00-\u9fa5]{0,64}", message="户籍只能输入汉字/字母/数字")
	private String nativePlace;

	/** 职称 */
	private Integer title;

	/** 家庭住址 */
	@Length(groups={Update.class, Insert.class}, max=64, message="住址内容超过长度")
	@Pattern(groups={Update.class, Insert.class}, regexp="[a-zA-Z0-9_\u4e00-\u9fa5]{0,64}", message="住址只能输入汉字和数字")
	private String homeAddress;
	
	/** 部门Code */
	private Integer deptCode;
}
